/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func postorderTraversal(root *TreeNode) []int {
    ans := []int{}
    
    if root == nil {
        return ans
    }

    // 初始化栈
    st := list.New()
    st.PushBack(root)

    for st.Len() > 0 {
        node := st.Remove(st.Back()).(*TreeNode)
        ans = append(ans, node.Val)

        // 放入左节点
        if node.Left != nil {
            st.PushBack(node.Left)
        }

        // 放入右节点
        if node.Right != nil {
            st.PushBack(node.Right)
        }
    }
    revserse(ans)
    return ans
}

func revserse (ans []int) {
    l, r := 0, len(ans)-1
    for l<r {
        ans[l], ans[r] = ans[r], ans[l]
        r--
        l++
    }
}